/**
 * 
 */
package com.cares.infobird.util;

/**   
 * <JFreechart公共类> 
 * <功能详细描述> 
 * @author  zwq 
 * @version  [版本号, 2012-5-30] 
 * @see  [相关类/方法] 
 * @since  [产品/模块版本]
 */

import java.awt.Font;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.DefaultCategoryDataset;

public class CreateJFreechartUtil {
	public String setImages(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		DefaultCategoryDataset dataset = getDataSet();
		JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题
				"水果", // 目录轴的显示标签
				"产量", // 数值轴的显示标签
				dataset, // 数据集
				PlotOrientation.VERTICAL, // 图表方向：水平、垂直
				true, // 是否显示图例（对于简单的柱状图必须是false）
				false, // 是否生成工具
				false // 是否生成URL链接
				);
		// 解决乱码问题
		setImageFont(chart);

		// 生成图片
		String filename = ServletUtilities.saveChartAsPNG(chart, 600, 400,
				null, request.getSession());

		//ServletContext servlet = ((HttpSession) request).getServletContext();

		// 得到功能路径
		//String imagePath_area = servlet.getContextPath() + "/servlet/DisplayChart?filename=" + filename;

		return filename;
	}

	/**
	 * 解决乱码问题
	 */
	private void setImageFont(JFreeChart chart) {
		CategoryPlot plot = (CategoryPlot) chart.getPlot();
		CategoryAxis domainAxis = plot.getDomainAxis();
		ValueAxis numberaxis = plot.getRangeAxis();

		// 设置标题文字
		chart.getTitle().setFont(new Font("宋体", Font.BOLD, 12));

		// 设置X轴坐标上的文字
		domainAxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 11));

		// 设置X 轴的标题文字
		domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));

		// 设置Y 轴坐标上的文字
		numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));

		// 设置Y 轴的标题文字
		numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));

		// 设置底部文字
		chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
	}

	/**
	 * 获取一个组合数据集对象
	 * 
	 * @return
	 */
	private DefaultCategoryDataset getDataSet() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();

		dataset.addValue(100, "北京", "苹果");
		dataset.addValue(120, "上海", "苹果");
		dataset.addValue(380, "广州", "苹果");
		dataset.addValue(230, "北京", "梨子");
		dataset.addValue(200, "上海", "梨子");
		dataset.addValue(230, "广州", "梨子");
		dataset.addValue(400, "北京", "葡萄");
		dataset.addValue(300, "上海", "葡萄");
		dataset.addValue(500, "广州", "葡萄");
		return dataset;
	}
}
